var util = require("util");
const fxp = require("fast-xml-parser");

module.exports = function(req, res, postBody) {
	// console.log(util.inspect(postBody))
	// console.log(Object.keys(postBody));

	var xmlData = xmlAndJson(Object.keys(postBody));

	res.end(xmlData);
}

// 解析xml与json数据之间的转换
var xmlAndJson = function(obj) {
	try {
		var json = fxp.parse(obj[0], {
			cdataTagName: "_cdata",
		});
		console.log("json--", json);

		var data = {
			xml: {
				ToUserName: json.xml.FromUserName,
				FromUserName: json.xml.ToUserName,
				CreateTime: Number(new Date().getTime().toString()),
			}
		}

		switch (json.xml.MsgType._cdata) {
			case "text":
				return massageTest(data, json);
				break;

			case "image":
				return massageImage(data, json);
				break;

			case "voice":
				return massageVoice(data, json);
				break;
				
			case "event":	//推送事件
				return massageEvent(data, json);
				break;
		}

	} catch (e) {
		console.log("----发生错误----：" + e + "\n");
		return "success";
	}
	// --------------------------=====================----------------------
	
	
	// 事件
	function massageEvent(data, json){
		var length = Object.keys(json).length;
		if(length <= 7){
			if(json.xml.Event._cdata == "subscribe"){ // 订阅
				data.xml.MsgType = {
					_cdata: 'text'
				};
				data.xml.Content = {
					_cdata: '年轻的少年哦，欢迎你的到来哦~~'  
				};
				console.log(data);
				return jsonToXml(data)
			}else if(json.xml.Event._cdata == "unsubscribe"){ // 取消订阅
				// 略。。。。
			}
		}
		
		
	}
	
	// 语音信息
	function massageVoice(data, json){
		data.xml.MsgType = {
			_cdata: 'voice'
		};
		data.xml.Voice = {
			MediaId: {
				_cdata: json.xml.MediaId._cdata
			}
		}
		
		return jsonToXml(data);
	}
	
	// 图片信息
	function massageImage(data, json){
		data.xml.MsgType = {
			_cdata: 'image'
		};
		data.xml.Image = {
			MediaId: {
				_cdata: json.xml.MediaId._cdata
			}
		}
		return jsonToXml(data);
	}
	
	
	// 文本信息
	function massageTest(data, json){
		data.xml.MsgType = {
			_cdata: 'text'
		};
		data.xml.Content = {
			_cdata: '年轻的少年哦，这是你掉的宝物抹~~' + json.xml.Content._cdata
		};
		return jsonToXml(data)
	}

	// 将json数据转换成xml格式 
	function jsonToXml(json) {
		return new fxp.j2xParser({
			cdataTagName: "_cdata"
		}).parse(json);
	}
}
